import torch
import numpy as np


########################
# pytorch简单创建tensor
########################


# 1. Tensor的创建，包括从数据创建（一维），列表，从numpy数组创建，和从已有Tensor创建等方式
def demo1():
    t1 = torch.tensor(1)
    print(f't1:{t1}  {type(t1)} ')
    print('-' * 30)


    t2 = torch.tensor([[1, 2, 3], [4, 5, 6]])
    print(f't2:{t2}  类型： {type(t2)} ')
    print('-' * 30)

    data2 = np.random.randint(0, 10, (2, 3))  
    t3 = torch.tensor(data2, dtype=torch.float32)
    print(f't3:{t3}  类型： {type(t3)} ')
    print('-' * 30)
    
    # 指定形状创建Tensor
    t4 = torch.Tensor(2,3)
    print(f't4:{t4}  类型： {type(t4)} ')
    print('-' * 30)

    # 从numpy数组创建Tensor  跟t3一样
    t5 = torch.tensor(np.random.randint(0, 10, (2, 3)))
    print(f't5:{t5}  {type(t5)} ')
    print('-' * 30)

# zeoroes, ones，full,ones_like的形式等创建Tensor
def demo2():
    print(f'zeros的创建方式，创建全零张量')
    t1 = torch.zeros((2, 3), dtype=torch.int32)
    print(f't1:{t1} 类型： {type(t1)} ')
    print('-' * 30)

    print(f'使用ones_like,创建全一张量')
    t2 = torch.tensor([[1,2,3],[2,3,4]])
    t2 = torch.ones_like(t2)
    print(f't2:{t2} 类型： {type(t2)} ')
    print('-' * 30)

    print(f'full的创建方式，创建指定值张量')
    t3 = torch.full((2,3,4), 255)
    print(f't3:{t3} 类型： {type(t3)} ')
    print('-' * 30)


    print(f'full_likes的创建方式，创建张量')
    t4 = torch.tensor([[1,2,3],[2,3,4]])
    t4 = torch.full_like(t4, 1)
    print(f't4:{t4} 类型： {type(t4)} ')
    print('-' * 30) 

if __name__ == "__main__":
    demo1()
    print('='*50)
    demo2()

